// 这个文件是配合导航守卫来做页面跳转拦截的 其实这个文件的代码应该写在router/index.js
import router from '@/router'
import store from '@/store'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'
// 每一次路由跳转其实路由是知道的?  A页面(/login) -> B页面(/)
// 路由上有一个方法 beforeEach 前置导航守卫(路由钩子)
// to 去哪里 路由信息对象(记录的要去的页面路由信息)
// from 路由信息对象(记录的从哪来页面路由信息) 从哪来
// next() 是一个放行函数  next如果不调用 是不会看到页面的 ()内可以写要去的页面路由地址
// 路由的前置导航守卫, 一般要做一些页面拦截
// 如果没有登录 不允许访问别有权限的页面  只能访问登录页面/404页面
// 如果处于登录状态还访问登录页面 直接强制去首页
// 检测是否登录过??? 判断token
const list = ['/login', '/404'] // 白名单
router.beforeEach(async(to, from, next) => {
  // 开启进度条
  Nprogress.start()
  // 1. 检测是否有token
  const token = store.getters.token
  // 2. 如果有token,
  if (token) {
    // 3. 看去的是不是登录页面, 如果要去登录页面, 直接去首页
    if (to.path === '/login') {
      next('/')
      Nprogress.done()
    } else {
      // console.log('进入系统前获取信息') // 在这个位置获取个人信息
      // 因为后面要做权限处理 进入页面前获取有几条权限展示几条点击左侧链接
      if (!store.getters.name) { // 判断是否有个人信息, 没有个人信息去获取
        await store.dispatch('user/getUserInfo') // 个人信息中有一个roles.menus 这个用户的权限 坑
      }
      // 4. 登陆过去别的页面, 想去哪就放行你去哪
      next()
    }
  } else {
    // 没有token
    // 5. 没有登录, 如果去的是login /404 直接放行
    // if (to.path === '/login' || to.path === '/404') {
    if (list.includes(to.path)) { // includes是检测数组中是否包含某个元素
      next()
    } else {
      // 没有登录 不允许去有权限的页面
      next('/login')
      Nprogress.done()
    }
  }
})
// 路由的后置导航守卫  被next强制跳转的页面是不会经过后置导航守卫的, 需要手动done()
router.afterEach((to, from) => {
  console.log('经过后置导航守卫了')
  // 关闭进度条
  Nprogress.done()
})

// 导航守卫  放你进哪个页面  进到页面后才会创建这个组件的结构 发送对应组件需要的请求
// 导航守卫不放你进入这个页面 请求都没得发 组件都不会创建
